/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package workstationbookerweb.fragmentos;

import Fachada.Fachada;
import Servicios.ValidacionDatosEntrada;
import Singletons.Mensajes;
import VO.EdificioVO;
import VO.EstacionTrabajoVO;
import VO.ReservaEstacionVO;
import VO.ReservaSalaVO;
import VO.SalaVO;
import VO.UsuarioVO;
import com.sun.rave.web.ui.appbase.AbstractFragmentBean;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.Calendar;
import com.sun.webui.jsf.component.DropDown;
import com.sun.webui.jsf.component.ImageComponent;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.TextArea;
import com.sun.webui.jsf.component.TextField;
import com.sun.webui.jsf.model.Option;
import java.util.ArrayList;
import java.util.Date;
import javax.faces.FacesException;

/**
 * <p>Fragment bean that corresponds to a similarly named JSP page
 * fragment.  This class contains component definitions (and initialization
 * code) for all components that you have defined on this fragment, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version fragmentoReservarEstaciones.java
 * @version Created on 1/06/2011, 12:34:14 PM
 * @author Battousai
 */

public class fragmentoReservarEstaciones extends AbstractFragmentBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">
// <editor-fold defaultstate="collapsed" desc="Incialización componentes más accesores">
    private Button estacion1 = new Button();
    private Button estacion2 = new Button();
    private Button estacion3 = new Button();
    private Button estacion4 = new Button();
    private Button estacion5 = new Button();
    private Button estacion6 = new Button();
    private Button estacion7 = new Button();
    private Button estacion8 = new Button();
    private Button estacion9 = new Button();
    private Button estacion10 = new Button();
    private Button estacion11 = new Button();
    private Button estacion12 = new Button();
    private Button estacion13 = new Button();
    private Button estacion14 = new Button();
    private Button estacion15 = new Button();
    private Button estacion16 = new Button();
    private Button estacion17 = new Button();
    private Button estacion18 = new Button();
    private Button estacion19 = new Button();
    private Button estacion20 = new Button();
    private Button estacion21 = new Button();
    private Button estacion22 = new Button();
    private Button estacion23 = new Button();
    private Button estacion24 = new Button();
    private Button estacion25 = new Button();
    private Button estacion26 = new Button();
    private Button estacion27 = new Button();
    private Button estacion28 = new Button();
    private Button estacion29 = new Button();
    private Button estacion30 = new Button();
    private Button estacion31 = new Button();
    private Button estacion32 = new Button();
    private Button estacion33 = new Button();
    private Button estacion34 = new Button();
    private Button estacion35 = new Button();
    private Button estacion36 = new Button();
    private Button estacion37 = new Button();
    private Button estacion38 = new Button();
    private Button estacion39 = new Button();
    private Button estacion40 = new Button();
    private Button estacion41 = new Button();
    private Button estacion42 = new Button();
    private Button estacion43 = new Button();
    private Button estacion44 = new Button();
    private Button estacion45 = new Button();
    private Button estacion46 = new Button();
    private Button estacion47 = new Button();
    private Button estacion48 = new Button();
    private Button estacion49 = new Button();
    private Button estacion50 = new Button();
    private static int estacionSeleccionada = -1;
    private static SalaVO sala;
    private java.util.Calendar fecha = java.util.Calendar.getInstance();
    private java.util.Calendar fechaFin = java.util.Calendar.getInstance();

    private ValidacionDatosEntrada valida = new ValidacionDatosEntrada();
    UsuarioVO usuario;

    //Hora máxima de préstamos en el horario establecido según día
    private int horaMax = 25;
    //Hora mínima de préstamos en el horario establecido según día
    private int horaMin = 0;
    private boolean primerAcceso = true;
    private ReservaEstacionVO[] reservasEstacion;
    private Button[] estaciones;
    ArrayList<EstacionTrabajoVO> listaEstaciones;
    private int numeroEstaciones;
    private int[] estadoEstaciones;
    private long[] idEstaciones;
    private ReservaSalaVO reservaSala;
    public Button getEstacion1() {
        return estacion1;
    }
    public void setEstacion1(Button b) {
        this.estacion1 = b;
    }

    public Button getEstacion10() {
        return estacion10;
    }

    public void setEstacion10(Button estacion10) {
        this.estacion10 = estacion10;
    }

    public Button getEstacion11() {
        return estacion11;
    }

    public void setEstacion11(Button estacion11) {
        this.estacion11 = estacion11;
    }

    public Button getEstacion12() {
        return estacion12;
    }

    public void setEstacion12(Button estacion12) {
        this.estacion12 = estacion12;
    }

    public Button getEstacion13() {
        return estacion13;
    }

    public void setEstacion13(Button estacion13) {
        this.estacion13 = estacion13;
    }

    public Button getEstacion14() {
        return estacion14;
    }

    public void setEstacion14(Button estacion14) {
        this.estacion14 = estacion14;
    }

    public Button getEstacion15() {
        return estacion15;
    }

    public void setEstacion15(Button estacion15) {
        this.estacion15 = estacion15;
    }

    public Button getEstacion16() {
        return estacion16;
    }

    public void setEstacion16(Button estacion16) {
        this.estacion16 = estacion16;
    }

    public Button getEstacion17() {
        return estacion17;
    }

    public void setEstacion17(Button estacion17) {
        this.estacion17 = estacion17;
    }

    public Button getEstacion18() {
        return estacion18;
    }

    public void setEstacion18(Button estacion18) {
        this.estacion18 = estacion18;
    }

    public Button getEstacion19() {
        return estacion19;
    }

    public void setEstacion19(Button estacion19) {
        this.estacion19 = estacion19;
    }

    public Button getEstacion2() {
        return estacion2;
    }

    public void setEstacion2(Button estacion2) {
        this.estacion2 = estacion2;
    }

    public Button getEstacion20() {
        return estacion20;
    }

    public void setEstacion20(Button estacion20) {
        this.estacion20 = estacion20;
    }

    public Button getEstacion21() {
        return estacion21;
    }

    public void setEstacion21(Button estacion21) {
        this.estacion21 = estacion21;
    }

    public Button getEstacion22() {
        return estacion22;
    }

    public void setEstacion22(Button estacion22) {
        this.estacion22 = estacion22;
    }

    public Button getEstacion23() {
        return estacion23;
    }

    public void setEstacion23(Button estacion23) {
        this.estacion23 = estacion23;
    }

    public Button getEstacion24() {
        return estacion24;
    }

    public void setEstacion24(Button estacion24) {
        this.estacion24 = estacion24;
    }

    public Button getEstacion25() {
        return estacion25;
    }

    public void setEstacion25(Button estacion25) {
        this.estacion25 = estacion25;
    }

    public Button getEstacion26() {
        return estacion26;
    }

    public void setEstacion26(Button estacion26) {
        this.estacion26 = estacion26;
    }

    public Button getEstacion27() {
        return estacion27;
    }

    public void setEstacion27(Button estacion27) {
        this.estacion27 = estacion27;
    }

    public Button getEstacion28() {
        return estacion28;
    }

    public void setEstacion28(Button estacion28) {
        this.estacion28 = estacion28;
    }

    public Button getEstacion29() {
        return estacion29;
    }

    public void setEstacion29(Button estacion29) {
        this.estacion29 = estacion29;
    }

    public Button getEstacion3() {
        return estacion3;
    }

    public void setEstacion3(Button estacion3) {
        this.estacion3 = estacion3;
    }

    public Button getEstacion30() {
        return estacion30;
    }

    public void setEstacion30(Button estacion30) {
        this.estacion30 = estacion30;
    }

    public Button getEstacion31() {
        return estacion31;
    }

    public void setEstacion31(Button estacion31) {
        this.estacion31 = estacion31;
    }

    public Button getEstacion32() {
        return estacion32;
    }

    public void setEstacion32(Button estacion32) {
        this.estacion32 = estacion32;
    }

    public Button getEstacion33() {
        return estacion33;
    }

    public void setEstacion33(Button estacion33) {
        this.estacion33 = estacion33;
    }

    public Button getEstacion34() {
        return estacion34;
    }

    public void setEstacion34(Button estacion34) {
        this.estacion34 = estacion34;
    }

    public Button getEstacion35() {
        return estacion35;
    }

    public void setEstacion35(Button estacion35) {
        this.estacion35 = estacion35;
    }

    public Button getEstacion36() {
        return estacion36;
    }

    public void setEstacion36(Button estacion36) {
        this.estacion36 = estacion36;
    }

    public Button getEstacion37() {
        return estacion37;
    }

    public void setEstacion37(Button estacion37) {
        this.estacion37 = estacion37;
    }

    public Button getEstacion38() {
        return estacion38;
    }

    public void setEstacion38(Button estacion38) {
        this.estacion38 = estacion38;
    }

    public Button getEstacion39() {
        return estacion39;
    }

    public void setEstacion39(Button estacion39) {
        this.estacion39 = estacion39;
    }

    public Button getEstacion4() {
        return estacion4;
    }

    public void setEstacion4(Button estacion4) {
        this.estacion4 = estacion4;
    }

    public Button getEstacion40() {
        return estacion40;
    }

    public void setEstacion40(Button estacion40) {
        this.estacion40 = estacion40;
    }

    public Button getEstacion41() {
        return estacion41;
    }

    public void setEstacion41(Button estacion41) {
        this.estacion41 = estacion41;
    }

    public Button getEstacion42() {
        return estacion42;
    }

    public void setEstacion42(Button estacion42) {
        this.estacion42 = estacion42;
    }

    public Button getEstacion43() {
        return estacion43;
    }

    public void setEstacion43(Button estacion43) {
        this.estacion43 = estacion43;
    }

    public Button getEstacion44() {
        return estacion44;
    }

    public void setEstacion44(Button estacion44) {
        this.estacion44 = estacion44;
    }

    public Button getEstacion45() {
        return estacion45;
    }

    public void setEstacion45(Button estacion45) {
        this.estacion45 = estacion45;
    }

    public Button getEstacion46() {
        return estacion46;
    }

    public void setEstacion46(Button estacion46) {
        this.estacion46 = estacion46;
    }

    public Button getEstacion47() {
        return estacion47;
    }

    public void setEstacion47(Button estacion47) {
        this.estacion47 = estacion47;
    }

    public Button getEstacion48() {
        return estacion48;
    }

    public void setEstacion48(Button estacion48) {
        this.estacion48 = estacion48;
    }

    public Button getEstacion49() {
        return estacion49;
    }

    public void setEstacion49(Button estacion49) {
        this.estacion49 = estacion49;
    }

    public Button getEstacion5() {
        return estacion5;
    }

    public void setEstacion5(Button estacion5) {
        this.estacion5 = estacion5;
    }

    public Button getEstacion50() {
        return estacion50;
    }

    public void setEstacion50(Button estacion50) {
        this.estacion50 = estacion50;
    }

    public Button getEstacion6() {
        return estacion6;
    }

    public void setEstacion6(Button estacion6) {
        this.estacion6 = estacion6;
    }

    public Button getEstacion7() {
        return estacion7;
    }

    public void setEstacion7(Button estacion7) {
        this.estacion7 = estacion7;
    }

    public Button getEstacion8() {
        return estacion8;
    }

    public void setEstacion8(Button estacion8) {
        this.estacion8 = estacion8;
    }

    public Button getEstacion9() {
        return estacion9;
    }

    public void setEstacion9(Button estacion9) {
        this.estacion9 = estacion9;
    }
    /**
     * <p>Automatically managed component initialization. <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private static Fachada fachada;
    private ArrayList <EdificioVO> edificioVOs;
    private ArrayList<Option> listaEdificiosOp=new ArrayList<Option>();

    public ArrayList<EdificioVO> getEdificioVOs() {
        return edificioVOs;
    }
    public void setEdificioVOs(ArrayList<EdificioVO> edificioVOs) {
        this.edificioVOs = edificioVOs;
    }
    public ArrayList<Option> getListaEdificiosOp() {
        return listaEdificiosOp;
    }
    public void setListaEdificiosOp(ArrayList<Option> listaEdificiosOp) {
        this.listaEdificiosOp = listaEdificiosOp;
    }

    private ArrayList<Option> listaSalaOp=new ArrayList<Option>();
    public ArrayList<Option> getListaSalaOp() {
        return listaSalaOp;
    }
    public void setListaSalaOp(ArrayList<Option> listaSalaOp) {
        this.listaSalaOp = listaSalaOp;
    }


    private void _init() throws Exception {
        Inicializar();
    }

    
    private DropDown listaEdificiosCB = new DropDown();

    public DropDown getListaEdificiosCB() {
        return listaEdificiosCB;
    }

    public void setListaEdificiosCB(DropDown dd) {
        this.listaEdificiosCB = dd;
    }
    private DropDown listaSalasCB = new DropDown();

    public DropDown getListaSalasCB() {
        return listaSalasCB;
    }

    public void setListaSalasCB(DropDown dd) {
        this.listaSalasCB = dd;
    }
    private Label mensajeL = new Label();

    public Label getMensajeL() {
        return mensajeL;
    }

    public void setMensajeL(Label l) {
        this.mensajeL = l;
    }
    private Calendar fechaCal = new Calendar();

    public Calendar getFechaCal() {
        return fechaCal;
    }

    public void setFechaCal(Calendar c) {
        this.fechaCal = c;
    }
    private TextField horaIniTF = new TextField();

    public TextField getHoraIniTF() {
        return horaIniTF;
    }

    public void setHoraIniTF(TextField tf) {
        this.horaIniTF = tf;
    }
    private TextField horaFinTF = new TextField();

    public TextField getHoraFinTF() {
        return horaFinTF;
    }

    public void setHoraFinTF(TextField tf) {
        this.horaFinTF = tf;
    }
    private Button reservarB = new Button();

    public Button getReservarB() {
        return reservarB;
    }

    public void setReservarB(Button b) {
        this.reservarB = b;
    }
    private ImageComponent fondoSala = new ImageComponent();

    public ImageComponent getFondoSala() {
        return fondoSala;
    }

    public void setFondoSala(ImageComponent ic) {
        this.fondoSala = ic;
    }
    private TextArea descripcionTA = new TextArea();

    public TextArea getDescripcionTA() {
        return descripcionTA;
    }

    public void setDescripcionTA(TextArea ta) {
        this.descripcionTA = ta;
    }
    // </editor-fold>

    public fragmentoReservarEstaciones() {
    }

    /**
     * <p>Callback method that is called whenever a page containing
     * this page fragment is navigated to, either directly via a URL,
     * or indirectly via page navigation.  Override this method to acquire
     * resources that will be needed for event handlers and lifecycle methods.</p>
     * 
     * <p>The default implementation does nothing.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        listaSalasCB.setDisabled(true);
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here
        
        
        // <editor-fold defaultstate="collapsed" desc="Visual-Web-managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Page1 Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called.  Override this
     * method to release resources acquired in the <code>init()</code>
     * resources that will be needed for event handlers and lifecycle methods.</p>
     * 
     * <p>The default implementation does nothing.</p>
     */
    @Override
    public void destroy() {
    }

    public String verSalasB_action() {
        ArrayList<SalaVO> listaInicial = fachada.leerSalas();
        listaSalaOp = new ArrayList<Option>();
        ArrayList<SalaVO> listaFinal = new ArrayList<SalaVO>();
        String evo =(String) listaEdificiosCB.getSelected();
        if (listaInicial != null && !listaInicial.isEmpty()){
            for (SalaVO svo: listaInicial){
                if ((svo.getEdificio().equals(evo))){
                    listaFinal.add(svo);
                }
            }
            for (SalaVO svo :listaFinal){
                Option a = new Option(svo.getNombre());
                listaSalaOp.add(a);
                listaSalasCB.setSelected(svo.getNombre());
            }
            listaSalasCB.setDisabled(false);
        }else{
            mensajeL.setText("No existen salas en este edificio. Por favor hable con el super Administrador.");
            listaSalasCB.setDisabled(true);

        }
        return null;
    }

    public String verB_action() {
        // TODO: Process the action. Return value is a navigation
        // case name where null will return to the same page.
        String seleccion=listaSalasCB.getSelected().toString();
        verSalasB_action();
        listaSalasCB.setSelected(seleccion);
        if (!listaSalasCB.isDisabled()){
            sala = fachada.leerSalaPorNombre(listaSalasCB.getSelected().toString());
            setValue("#{sessionScope.sala}", sala);
            setValue("#{sessionScope.estacionSeleccionada}", null);
        }else{
            mensajeL.setText("No existen salas en este edificio. Por favor hable con el super Administrador.");
        }
            
        if (fechaCal.isValid()){
                if (horaIniTF.getText() == null || horaFinTF.getText() == null){
                    mensajeL.setText(Mensajes.ERROR_CAMPOS_VACIOS);
                    return null;
                }
                if (horaIniTF.getText().toString().equals("") || horaFinTF.getText().toString().equals("")){
                    mensajeL.setText(Mensajes.ERROR_CAMPOS_VACIOS);
                    return null;
                }
                String horaIni = horaIniTF.getText().toString();
                String horaFin = horaFinTF.getText().toString();
                try{
                    if (!(valida.formatoHoraCorrecto(horaIni) && valida.formatoHoraCorrecto(horaFin))){
                        mensajeL.setText(Mensajes.ERROR_FORMATO_HORA);
                        return null;
                    }
                    if (!valida.horasEnOrden(horaIni, horaFin)){
                        mensajeL.setText(Mensajes.ERROR_HORAS);
                        return null;
                    }
                }catch(NumberFormatException npe){
                    mensajeL.setText(Mensajes.ERROR_FORMATO_HORA);
                    return null;
                }
                if (Integer.parseInt(horaIni.substring(0, 2)) < horaMin || Integer.parseInt(horaFin.substring(0, 2)) > horaMax){
                    mensajeL.setText(Mensajes.ERROR_HORARIO_ATENCION);
                    return null;
                }
                if(!valida.fechaValida(fechaCal.getSelectedDate())){
                    mensajeL.setText(Mensajes.ERROR_HORARIO_PASADO);
                    return null;
                }
                int dia=fechaCal.getSelectedDate().getDay();
                if(dia==0){
                    mensajeL.setText(Mensajes.ERROR_HORARIO_DOMINGO);
                    return null;
                }
                String horarioSala=dia==6?sala.getHorarioSabado():sala.getHorarioSemana();
                boolean horarioAtencionApto=fachada.horarioAtencion(horarioSala, horaIni+"-"+horaFin);
                if(!horarioAtencionApto){
                    mensajeL.setText("Horario: Entre semana("+sala.getHorarioSemana()+") - Sabados("+sala.getHorarioSabado()+")");
                    return null;
                }
                fecha.setTime(fechaCal.getSelectedDate());
                fecha.set(java.util.Calendar.HOUR_OF_DAY,Integer.parseInt(horaIni.substring(0, 2)));
                fecha.set(java.util.Calendar.MINUTE,Integer.parseInt(horaIni.substring(3, 5)));
                fechaFin.setTime(fechaCal.getSelectedDate());
                fechaFin.set(java.util.Calendar.HOUR_OF_DAY,Integer.parseInt(horaFin.substring(0, 2)));
                fechaFin.set(java.util.Calendar.MINUTE,Integer.parseInt(horaFin.substring(3, 5)));                
        }else{
            mensajeL.setText("Elija una fecha valida.");
        }
        init();
        return null;
    }

 // <editor-fold defaultstate="collapsed" desc="Accesores de botones">
    public String estacion1_action() {
        accionBotones(1);
        return null;
    }

    public String estacion2_action() {
        accionBotones(2);
        return null;
    }

    public String estacion3_action() {
        accionBotones(3);
        return null;
    }

    public String estacion4_action() {
        accionBotones(4);
        return null;
    }

    public String estacion5_action() {
        accionBotones(5);
        return null;
    }

    public String estacion6_action() {
        accionBotones(6);
        return null;
    }

    public String estacion7_action() {
        accionBotones(7);
        return null;
    }

    public String estacion8_action() {
        accionBotones(8);
        return null;
    }

    public String estacion9_action() {
        accionBotones(9);
        return null;
    }

    public String estacion10_action() {
        accionBotones(10);
        return null;
    }

    public String estacion11_action() {
        accionBotones(11);
        return null;
    }

    public String estacion12_action() {
        accionBotones(12);
        return null;
    }

    public String estacion13_action() {
        accionBotones(13);
        return null;
    }

    public String estacion14_action() {
        accionBotones(14);
        return null;
    }

    public String estacion15_action() {
        accionBotones(15);
        return null;
    }

    public String estacion16_action() {
        accionBotones(16);
        return null;
    }

    public String estacion17_action() {
        accionBotones(17);
        return null;
    }

    public String estacion18_action() {
        accionBotones(18);
        return null;
    }

    public String estacion19_action() {
        accionBotones(19);
        return null;
    }

    public String estacion20_action() {
        accionBotones(20);
        return null;
    }

    public String estacion21_action() {
        accionBotones(21);
        return null;
    }

    public String estacion22_action() {
        accionBotones(22);
        return null;
    }

    public String estacion23_action() {
        accionBotones(23);
        return null;
    }

    public String estacion24_action() {
        accionBotones(24);
        return null;
    }

    public String estacion25_action() {
        accionBotones(25);
        return null;
    }

    public String estacion26_action() {
        accionBotones(26);
        return null;
    }

    public String estacion27_action() {
        accionBotones(27);
        return null;
    }

    public String estacion28_action() {
        accionBotones(28);
        return null;
    }

    public String estacion29_action() {
        accionBotones(29);
        return null;
    }

    public String estacion30_action() {
        accionBotones(30);
        return null;
    }

    public String estacion31_action() {
        accionBotones(31);
        return null;
    }

    public String estacion32_action() {
        accionBotones(32);
        return null;
    }

    public String estacion33_action() {
        accionBotones(33);
        return null;
    }

    public String estacion34_action() {
        accionBotones(34);
        return null;
    }

    public String estacion35_action() {
        accionBotones(35);
        return null;
    }

    public String estacion36_action() {
        accionBotones(36);
        return null;
    }

    public String estacion37_action() {
        accionBotones(37);
        return null;
    }

    public String estacion38_action() {
        accionBotones(38);
        return null;
    }

    public String estacion39_action() {
        accionBotones(39);
        return null;
    }

    public String estacion40_action() {
        accionBotones(40);
        return null;
    }

    public String estacion41_action() {
        accionBotones(41);
        return null;
    }

    public String estacion42_action() {
        accionBotones(42);
        return null;
    }

    public String estacion43_action() {
        accionBotones(43);
        return null;
    }

    public String estacion44_action() {
        accionBotones(44);
        return null;
    }

    public String estacion45_action() {
        accionBotones(45);
        return null;
    }

    public String estacion46_action() {
        accionBotones(46);
        return null;
    }

    public String estacion47_action() {
        accionBotones(47);
        return null;
    }

    public String estacion48_action() {
        accionBotones(48);
        return null;
    }

    public String estacion49_action() {
        accionBotones(49);
        return null;
    }

    public String estacion50_action() {
        accionBotones(50);
        return null;
    }

     // </editor-fold>

    private void accionBotones(int i){

        sala = (SalaVO)getValue("#{sessionScope.sala}");
        if (sala == null){
            mensajeL.setText(Mensajes.ERROR_SALA_SELECCIONADA);
            return;
        }
        listaEstaciones = fachada.listaEstacionesTrabajoPorSala(sala.getId());
        estacionSeleccionada = i-1;
        estaciones[estacionSeleccionada].setStyleClass("botonEstacionSeleccionada");
        setValue("#{sessionScope.estacionSeleccionada}", new Integer(estacionSeleccionada));
        EstacionTrabajoVO etvo = listaEstaciones.get(estacionSeleccionada);
        mensajeL.setText("Estación seleccionada: No "+etvo.getNumero());
        String mensaje = "Número: "+etvo.getNumero();
        mensaje = mensaje+"\nCapacidad: "+Integer.toString(etvo.getCapacidad());
        mensaje = mensaje+"\nDisponible: "+(etvo.isDisponibilidad()?"Si":"No");
        mensaje = mensaje+"\nPC: "+(etvo.isPc()?"Si":"No");
        mensaje = mensaje+"\nToma: "+(etvo.isToma()?"Si":"No");
        mensaje = mensaje+"\nDescripción: "+etvo.getDescripcion();
        descripcionTA.setText(mensaje);

        init();
        estadosBotonesEstacion();
        String seleccion=listaSalasCB.getSelected().toString();
        verSalasB_action();
        listaSalasCB.setSelected(seleccion);
    }

    public String reservarB_action() {
        ReservaEstacionVO reservacion=null;
        listaEstaciones = fachada.listaEstacionesTrabajoPorSala(sala.getId());
        Long idSalaSeleccionada=listaEstaciones.get(estacionSeleccionada).getId();
        try{
            reservacion=fachada.reservarEstacionTrabajo(usuario,idSalaSeleccionada ,horaIniTF.getText().toString()+"-"+horaFinTF.getText().toString(), fechaCal.getSelectedDate());
        }catch(Exception e){
            mensajeL.setText(Mensajes.ERROR_GUARDANDO);
            return null;
        }
        if(reservacion==null){
            mensajeL.setText(Mensajes.ERROR_GUARDANDO);
            return null;
        }
        return "/faces/paginas//VerReservacionesUsuario.jsp";
    }

    private void Inicializar(){
        setValue("#{sessionScope.usuario}",new UsuarioVO("jacelys", "john","a".toCharArray(),257748 ,1019034461 ,0 ));
        Integer x = (Integer)getValue("#{sessionScope.estacionSeleccionada}");
        if (x != null)
            estacionSeleccionada = x.intValue();
        else
        estacionSeleccionada = -1;
        if (primerAcceso){
            fachada = Fachada.getInstance();
            edificioVOs= fachada.leerEdificios();
            if (edificioVOs ==null ||edificioVOs.isEmpty()){
                mensajeL.setText("No existen edificios. Por favor hable con el super Administrador.");
                listaSalasCB.setDisabled(true);
            }else{
                listaEdificiosOp=new ArrayList<Option>();
                for (EdificioVO svo :edificioVOs)
                    listaEdificiosOp.add(new Option(svo.getNombre()));
                listaSalasCB.setDisabled(false);
            }
            try{
                usuario=(UsuarioVO)getValue("#{sessionScope.usuario}");
            }catch(Exception e){
                usuario=null;
            }
            if(usuario==null){
                mensajeL.setText(Mensajes.ERROR_INESPERADO);
                //reservarB.setDisabled(true);
                return;
            }
            estaciones = new Button[] {estacion1, estacion2, estacion3, estacion4, estacion5,
                estacion6, estacion7, estacion8, estacion9, estacion10, estacion11, estacion12,
                estacion13, estacion14, estacion15, estacion16, estacion17, estacion18, estacion19,
                estacion20, estacion21, estacion22, estacion23, estacion24, estacion25, estacion26,
                estacion27, estacion28, estacion29, estacion30, estacion31, estacion32, estacion33,
                estacion34, estacion35, estacion36, estacion37, estacion38, estacion39, estacion40,
                estacion41, estacion42, estacion43, estacion44, estacion45, estacion46, estacion47,
                estacion48, estacion49, estacion50};
        }
        pintar();
    }

    private void pintar(){
        //Obtiene la lista de las estaciones de trabajo asociadas a la sala.
        sala = (SalaVO)getValue("#{sessionScope.sala}");
        if (sala==null){
            mensajeL.setText(Mensajes.ERROR_SALA_SELECCIONADA);
            return ;
        }
        mensajeL.setText(sala.getUrlFondo());
        fondoSala.setUrl(sala.getUrlFondo());
        listaEstaciones = fachada.listaEstacionesTrabajoPorSala(sala.getId());
        //Calcula el número de estaciones para futuros usos.
        numeroEstaciones = listaEstaciones.size();
        reservasEstacion = new ReservaEstacionVO[numeroEstaciones];
        
        //Inicializa el arreglo de ids de estaciones, de estado de las mismas y
        //configiraciones de los botones correspondientes.
        estadoEstaciones = new int[numeroEstaciones];
        idEstaciones = new long[numeroEstaciones];
        System.out.print(numeroEstaciones);
        reservaSala = fachada.verReservaSala(sala.getId());
        int i = 0;
        for (EstacionTrabajoVO etvo: listaEstaciones){
            if (etvo == null){
                mensajeL.setText(Mensajes.ERROR_ESTACION_TRABAJO);
                return;
            }
            if(!etvo.isDisponibilidad())
                estadoEstaciones[i]= Mensajes.FUERA_DE_SEVICIO;
            else
                estadoEstaciones[i]= Mensajes.DISPONIBLE;

            idEstaciones[i] = etvo.getId();

            estaciones[i].setToolTip(etvo.getNumero()+"");

            estaciones[i].setVisible(true);
            int posX = etvo.getX() -130;
            int posY = etvo.getY() + 160;
            estaciones[i].setStyle("height: 48px; left: "+posX+"px; top: "+posY+"px; position: absolute; width: 48px");
            if(reservaSala==null){
                if(estadoEstaciones[i]!=Mensajes.FUERA_DE_SEVICIO){

                    reservasEstacion[i] = fachada.verReservaEstacionTrabajo(idEstaciones[i], fecha, fechaFin);
                    if(reservasEstacion[i]==null){
                        estadoEstaciones[i]= Mensajes.DISPONIBLE;
                        if (i == estacionSeleccionada)
                            estaciones[i].setImageURL(Mensajes.URL_ESTACION_DISPONIBLE_SELECCIONADA);
                        else
                            estaciones[i].setImageURL(Mensajes.URL_ESTACION_DISPONIBLE);
                    }else if(reservasEstacion[i].getEstado()==Mensajes.RESERVADA){
                        estadoEstaciones[i]= Mensajes.RESERVADA;
                        if (i == estacionSeleccionada)
                            estaciones[i].setImageURL(Mensajes.URL_ESTACION_RESERVADA_SELECCIONADA);
                        else
                            estaciones[i].setImageURL(Mensajes.URL_ESTACION_RESERVADA);
                    }else{
                        estadoEstaciones[i]= Mensajes.OCUPADA;
                        if (i == estacionSeleccionada)
                            estaciones[i].setImageURL(Mensajes.URL_ESTACION_OCUPADA_SELECCIONADA);
                        else
                            estaciones[i].setImageURL(Mensajes.URL_ESTACION_OCUPADA);
                    }
                    mensajeL.setText("");
                }else{
                    if (i == estacionSeleccionada)
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_FUERA_DE_SERVICIO_SELECCIONADA);
                    else
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_FUERA_DE_SERVICIO);
                }
            }else if(reservaSala.getEstado() == Mensajes.OCUPADA){
                if(estadoEstaciones[i]!=Mensajes.FUERA_DE_SEVICIO){
                    if (i == estacionSeleccionada)
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_OCUPADA_SELECCIONADA);
                    else
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_OCUPADA);
                }else{
                    if (i == estacionSeleccionada)
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_FUERA_DE_SERVICIO_SELECCIONADA);
                    else
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_FUERA_DE_SERVICIO);
                }
                mensajeL.setText("Sala Ocupada.");
            }else{
                if(estadoEstaciones[i]!=Mensajes.FUERA_DE_SEVICIO){
                    if (i == estacionSeleccionada)
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_RESERVADA_SELECCIONADA);
                    else
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_RESERVADA);
                }else{
                    if (i == estacionSeleccionada)
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_FUERA_DE_SERVICIO_SELECCIONADA);
                    else
                        estaciones[i].setImageURL(Mensajes.URL_ESTACION_FUERA_DE_SERVICIO);
                }
                mensajeL.setText("Sala Reservada.");
            }
            i++;
        }
        for (;i<50;i++){
            estaciones[i].setVisible(false);
        }
    }
    private void estadosBotonesEstacion() {
        if (!(estacionSeleccionada == -1)){
            if (estadoEstaciones[estacionSeleccionada] == Mensajes.DISPONIBLE){
                reservarB.setDisabled(false);
                reservarB.setStyleClass("botonPanel");
            }else if (estadoEstaciones[estacionSeleccionada] == Mensajes.RESERVADA){
                reservarB.setDisabled(true);
                reservarB.setStyleClass("botonPanel");
                mensajeL.setText(Mensajes.ERROR_DISPONIBILIDAD_ESTACION);                
            }else if (estadoEstaciones[estacionSeleccionada] == Mensajes.OCUPADA){
                reservarB.setDisabled(true);
                reservarB.setStyleClass("botonPanel");
                mensajeL.setText(Mensajes.ERROR_DISPONIBILIDAD_ESTACION);
            }else{
                reservarB.setDisabled(true);
                reservarB.setStyleClass("botonPanel");
                mensajeL.setText(Mensajes.ERROR_DISPONIBILIDAD_ESTACION);
            }
        }
    }
}
